package com.pai4j.zwiki.domain.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;

import java.time.LocalDateTime;

/**
 * 代码结构实体
 * 存储解析后的代码结构信息（类、方法、包等）
 *
 * @author pai4j
 * @since 2025-10-12
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "pai4j_code_structure", indexes = {
        @Index(name = "idx_task_id", columnList = "taskId"),
        @Index(name = "idx_structure_type", columnList = "structureType")
})
public class CodeStructureEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 关联的分析任务ID
     */
    @Column(nullable = false, length = 64)
    private String taskId;

    /**
     * 结构类型：package, class, interface, method, field
     */
    @Column(nullable = false, length = 20)
    private String structureType;

    /**
     * 结构名称
     */
    @Column(nullable = false, length = 255)
    private String name;

    /**
     * 完整限定名
     */
    @Column(length = 512)
    private String qualifiedName;

    /**
     * 所在包名
     */
    @Column(length = 255)
    private String packageName;

    /**
     * 父结构ID（如方法所属的类）
     */
    private Long parentId;

    /**
     * 访问修饰符：public, private, protected, default
     */
    @Column(length = 20)
    private String accessModifier;

    /**
     * 文件路径
     */
    @Column(length = 512)
    private String filePath;

    /**
     * 代码行数
     */
    private Integer lineCount;

    /**
     * 方法参数（JSON格式）
     */
    @Column(columnDefinition = "TEXT")
    private String methodParameters;

    /**
     * 返回类型
     */
    @Column(length = 255)
    private String returnType;

    /**
     * 注解信息（JSON格式）
     */
    @Column(columnDefinition = "TEXT")
    private String annotations;

    /**
     * 依赖关系（JSON格式）
     */
    @Column(columnDefinition = "TEXT")
    private String dependencies;

    /**
     * 代码摘要（LLM生成）
     */
    @Column(columnDefinition = "TEXT")
    private String summary;

    /**
     * 创建时间
     */
    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;
}

